﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

//struct tag    //          -类型名    
//{
//	//member - list;      -成员变量
//};//variable - list;      -结构体类型变量命名

//struct S
//{
//	char name[20];//姓名
//	char  Stu[20];//学号
//	double grade; //成绩
//	
//}s1 = {"zhangsan","20231314",99.9};
////第一种（就是在创建结构体类型时创建变量）创建结构体变量和初始化
//
//
//int main() {
//	//第二种创建结构体变量和初始化-与第一种的区别就是作用域不同
//	struct S s2 = {"lisi","2023520",99.8};
//	//第三种创建结构体变量和初始化-与第二种区别就是可以选择先初始化哪一种
//	struct S s3 = { .Stu = "2023521",.name = "wangwu",.grade = 99.6 };
//	
//	printf("姓名：%s 学号：%s 成绩：%.2lf\n", s1.name, s1.Stu, s1.grade);
//	printf("姓名：%s 学号：%s 成绩：%.2lf\n", s2.name, s2.Stu, s2.grade);
//	printf("姓名：%s 学号：%s 成绩：%.2lf\n", s3.name, s3.Stu, s3.grade);
//	return 0;
//}



//struct  S
//{
//	int i;
//};
////传值调用
//void cc(struct  S s) {
//	printf("s.i=%d\n", s.i);
//}
////传址调用
//void CC(struct  S* s) {
//	printf("s->i=%d\n", s->i);//第一种可以直接用 ->直接调用数据
//	printf("(*s).i=%d\n", (*s).i);//第二种就是可以先解引用再使用直接访问符
//}
//int main() {
//	struct  S s1 = { 4 };
//	cc(s1);
//	CC(&s1);
//	return 0;
//}


struct S4
{
	char c1;
	double d;
};

//struct S
//{
//	char a : 3;
//	char b : 4;
//	char c : 5;
//	char d : 4;
//};
//
//int main() {
//	struct S s = { 0 };
//	s.a = 10;
//	s.b = 12;
//	s.c = 3;
//	s.d = 4;
//
//	return 0;
//}
#include <stdio.h>
//联合类型的声明
//union Un// 类型名
//{
//	char c;//成员
//	int i;
//};
//int main()
//{
//	union Un s = {0};
//	printf("%zd\n", sizeof(s));
//	return 0;
//}
//#include <stdio.h>
////联合类型的声明
//union Un
//{
//	char c;
//	int i;
//};
//int main()
//{
//	//联合变量的定义
//	union Un un = { 0 };
//	// 下⾯输出的结果是⼀样的吗？
//	printf("%p\n", &(un.i));
//	printf("%p\n", &(un.c));
//	printf("%p\n", &un);
//	return 0;
//}

//联合类型的声明
//union Un
//{
//	struct S4 a;
//	char c;
//	int i;
//};
//int main()
//{
//	//联合变量的定义
//	printf("%zd\n", sizeof(union Un));
//	union Un un = { 0 };
//	un.i = 0x11223344;
//	printf("%x\n", un.i);
//	un.c = 0x55;
//	printf("%x\n", un.i);
//	return 0;
//}
#include <stdio.h>
union Un1
{
	char c[5];
	int i;
};
union Un2
{
	short c[7];
	int i;
};
int main()
{
	//下⾯输出的结果是什么？
	printf("%d\n", sizeof(union Un1));
	printf("%d\n", sizeof(union Un2));
	return 0;
}